package ar.edu.utn.frba.dds.tp.tests.vuelos;


import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.math.BigDecimal;



import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.junit.Before;
import org.junit.Test;

import ar.edu.utn.frba.dds.tp.code.Asientos.AsientoDeVuelo;
import ar.edu.utn.frba.dds.tp.code.Asientos.ClaseAsiento;
import ar.edu.utn.frba.dds.tp.code.Asientos.EstadoAsiento;
import ar.edu.utn.frba.dds.tp.code.Asientos.UbicacionAsiento;
import ar.edu.utn.frba.dds.tp.code.adapter.LanchitaAdapter;
import ar.edu.utn.frba.dds.tp.code.usuarios.UsuarioStandard;
import ar.edu.utn.frba.dds.tp.code.vuelos.Aerolinea;
import ar.edu.utn.frba.dds.tp.code.vuelos.TransactionCouldntSucceedException;
import ar.edu.utn.frba.dds.tp.code.vuelos.Vuelo;

public class AsientoDeVueloTest {
	
	AsientoDeVuelo asiento;
	Aerolinea lanchita = new LanchitaAdapter();
	Vuelo vuelo = new Vuelo("1","BA","FRM",new LocalDate(2012,10,10), new LocalDate(2012,10,10), new LocalTime(9,0), new LocalTime(10,30));

	@Before
	public void setUp() {
		
		asiento = new AsientoDeVuelo(10, new BigDecimal("6000"), ClaseAsiento.PRIMERA, UbicacionAsiento.PASILLO, EstadoAsiento.DISPONIBLE);
		
		vuelo.setAerolinea(lanchita);
		vuelo.agregarAsiento(asiento);
		asiento.setVuelo(vuelo);
	}
	
	@Test
	public void testAsientoDePrimeraEsSuperOferta(){
		asiento.setClase(ClaseAsiento.PRIMERA);
		assertTrue(asiento.soySuperOferta());
	}
	
	@Test
	public void testAsientoEjecutivoNoEsSuperOferta(){
		asiento.setClase(ClaseAsiento.EJECUTIVA);
		assertFalse(asiento.soySuperOferta());
	}
	
	@Test
	public void testAsientoCualquieraNoEsSuperOferta(){
		asiento.setClase(ClaseAsiento.TURISTA);
		assertFalse(asiento.soySuperOferta());
	}

	@Test (expected = TransactionCouldntSucceedException.class)
	public void testAsientoCompradoNoPuedeSobreReservarse(){
		asiento.setEstado(EstadoAsiento.COMPRADO);
		asiento.agregarSobreReserva(new UsuarioStandard());
	}
}
